CDK(Cloud Development Kit) Workshopをやってみた。
このブログでは、CDK を使用してアプリを作成およびデプロイする方法を学びましょう。
CDKWorkshopを参照として使用してこれを実行しました。これは非常に簡単です
CDK の紹介
CDK は、サポートされているプログラミング言語のいずれかでクラウド インフラストラクチャをコードとして定義できるクラウド開発キットです。
CDK は、AWS の主要な概念に基づいて設計されています。
- AWS SDK アプリは、TypeScript、JavaScript、Python、Java、C#、または Go で書かれたアプリケーションです。
- アプリは 1 つ以上のスタックを定義します。
- スタックにはコンポーネントが含まれます。
- 各構成では、次のような 1 つ以上の AWS リソースが定義されます:
- S3 Bucket
- AWS Lambda
- Amazon DynamoDB テーブル
CDK プロジェクト
新しい AWS CDK TypeScript プロジェクトを作成しましょう!
CDK init
プロジェクトディレクトリを作成する
空のディレクトリを作成しましょう
mkdir cdk-workshop && cd cdk-workshop
CDK init
新しい Typescript プロジェクトを作成する
cdk init sample-app --language typescript
実行したコマンドをリストした出力が得られます。
プロジェクト
ここでプロジェクトを詳しく見てみましょう。Visual Studio code を使用しました
IDE を開いてプロジェクト ディレクトリを調べてみましょう
-
lib/cdk-workshop-stack.ts
ここで CDK アプリケーションのメイン スタックが定義され、コードを記述します。
-
bin/cdk-workshop.ts
アプリケーションのエントリポイントです。 上記のポイントで定義したスタックをロードします。
CDK synth
CDK アプリが実行されると、アプリケーションで定義されたスタックごとに AWS クラウド形成テンプレートが生成されます。
CDK アプリを合成するには、クラウド形成テンプレートを使用して合成します
cdk syth
ご覧のとおり、このテンプレートには 4つのリソースが含まれています。
- AWS::SQS::Queue
- AWS::SNS::Topic
- AWS::SNS::Subscription
- AWS::SQS::QueuePolicy
CDK のデプロイ
環境のブートストラップ
初めて CDK アプリを AWS アカウントにデプロイするときに、S3 バケットなどの AWS リソースを含めるのに役立つブートストラップ スタックをインストールできます。
cdk bootstrap
デプロイしてみよう!
cdk deploy
CDK が当社に代わって行うセキュリティ関連の変更についてはお知らせします。
Cloudformation コンソール
CDK アプリは AWS クラウド フォーメーションを通じてデプロイされます。これは、AWS クラウド フォーメーション コンソールを使用してスタックを管理できることを意味します。
それでは、AWS CloudFormation コンソールを開いて見てみましょう。
CdkWorkshopStack を選択して [リソース] タブを開くと、リソースの物理的なアイデンティティが表示されます。
cdk synth を実行すると、テンプレートに表示されている 4 つのリソースがすべて表示されます。これは、cloudformation コンソールで確認できます。
Hello CDK
ユーザーがエンドポイント内の任意の URL にアクセスし、関数から挨拶を受信できるようにする CDK コードを作成します。 API Gateway エンドポイントでラムダ関数を使用します。CDKworkshop で述べたように、私のような初心者にとっては簡単です。
Hello Lambda
Lambdaハンドラーコード
-
- プロジェクト ツリーのルート (bin と lib の隣) にディレクトリ lambda を作成します。
- 次の内容を含む lambda/hello.js というファイルを追加します。
exports.handler = async function(event) {
console.log("request:", JSON.stringify(event));
return {
statusCode: 200,
headers: { "Content-Type": "text/plain" },
body: `CDK! You've hit ${event.path}\n`
};
};
これは、「CDK! You've hit URL[URL path]」というテキストを返す単純な Lambda 関数です。 この関数の出力には、HTTP ステータス コードと HTTP ヘッダーも含まれます。 これらは、ユーザーへの HTTP 応答を構築するために API Gateway によって使用されます。これは次のステップで実装します。
AWS Lambda 関数を STACK に追加する
-
import * as cdk from 'aws-cdk-lib'; import * as lambda from 'aws-cdk-lib/aws-lambda'; export class CdkWorkshopStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); // defines an AWS Lambda resource const hello = new lambda.Function(this, 'HelloHandler', { runtime: lambda.Runtime.NODEJS_16_X, // execution environment code: lambda.Code.fromAsset('lambda'), // code loaded from "lambda" directory handler: 'hello.handler' // file is "hello", function is "handler" }); } }
- cdkデプロイを使用してデプロイしましょう
cdk deploy
テスト
- AWS Lambdaコンソールを開きます
- 「テスト」ボタンをクリックして「テスト イベントの構成」ダイアログを開きます。
- イベントテンプレートリストからAmazon API Gateway AWS Proxyを選択します。
- [イベント名] に「test」と入力します。
- 「SAVE」をクリックします。
- もう一度 [テスト] をクリックし、実行が完了するまで待ちます。
ステータス 200 の出力と、目的のメッセージを含む本文を取得できました。
Api gateway
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigw from 'aws-cdk-lib/aws-apigateway';
export class CdkWorkshopStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// defines an AWS Lambda resource
const hello = new lambda.Function(this, 'HelloHandler', {
runtime: lambda.Runtime.NODEJS_14_X, // execution environment
code: lambda.Code.fromAsset('lambda'), // code loaded from "lambda" directory
handler: 'hello.handler' // file is "hello", function is "handler"
});
// defines an API Gateway REST API resource backed by our "hello" function.
new apigw.LambdaRestApi(this, 'Endpoint', {
handler: hello
});
}
}
これは、すべてのリクエストを AWS Lambda 関数にプロキシする API ゲートウェイを定義するために必要な作業です。 cdkデプロイを使用してデプロイしましょう
cdk deploy
テスト
デプロイが完了すると、次の行が表示されることに気づきます。
これはスタック出力です このエンドポイントをbrowserでヒットしてみます。 URLをコピーして実行します。
ブラウザで URL を実行すると、出力としてメッセージを取得できました。
結論として、AWS CDK は、コードを使用してクラウド インフラストラクチャを定義およびデプロイするための強力なツールです。 このブログで説明されている手順に従うことで、アプリケーションを迅速に作成してデプロイできます。 このブログは、https://cdkworkshop.com/ja/20-typescript/30-hello-cdk/200-lambda.html を参考にして試してみました。これは非常に簡単です。